<?php

declare(strict_types=1);

namespace App\Admin\Annotation;

use App\Admin\Annotation\Parser\AnnotationPermissionParser;
use Attribute;
use Newbie\Annotation\AbstractAnnotationAttribute;

/**
 * 用户权限验证。
 */
#[Attribute(Attribute::TARGET_METHOD)]
class Permission extends AbstractAnnotationAttribute {

    /**
     * 菜单代码
     * @var string
     */
    public string $name;

    /**
     * 多个菜单代码，过滤条件
     * 为 OR 时，检查有一个通过则全部通过
     * 为 AND 时，检查有一个不通过则全不通过
     * @var string
     */
    public string $where;

    /**
     * 第一个参数必须包含string类型，用来接收注解的参数
     * @param string $name
     */
    public function __construct (string $name = '') {
        // 解析参数
        $this->setArguments(func_get_args());
    }

    public static function getParser (): array|string {
        return [AnnotationPermissionParser::class];
    }

}